const db = require('../db/index.js');
const bcrypt = require('bcrypt');
//导入jwt,用于生成token
const jwt = require('jsonwebtoken');
//导入jwt配置文件,用于加密和解密
const jwtConfig = require('../jwt-config/index.js');

exports.register = (req, res) => {
    const requestData = req.body;
    //注册的时候账号密码不能为空
    if (!requestData.account || !requestData.password) {
        return res.send({
            status: 1,
            message: '账号或密码不能为空!'
        });
    }
    //判断账号是否已经存在
    const sql = 'select * from users where account = ?'
    db.query(sql, requestData.account, (err, result) => {
        if (err) {
            return res.send({
                status: 1,
                message: '数据库操作出错:' + err.message
            })
        }
        //如果存在
        if (result.length > 0) {
            return res.send({
                status: 1,
                message: '账号已存在!'
            });
        }
        //如果不存在，对密码加密
        requestData.password = bcrypt.hashSync(requestData.password, 10);
        const sql = 'insert into users set ?';
        //初始化一些用户信息
        const identity = '用户';
        const create_time = new Date();
        const status = 0;
        //插入数据库
        db.query(sql, {
            account: requestData.account,
            password: requestData.password,
            identity: identity,
            create_time: create_time,
            status: status,
        }, (err, result) => {
            if (err) {
                // 处理插入数据时的错误
                return res.send({
                    status: 1,
                    message: '数据库插入出错: ' + err.message
                });
            }
            //如果影响行数不等于1，说明注册失败
            if (result.affectedRows !== 1) {
                return res.send({
                    status: 1,
                    message: '注册失败!'
                })
            } else {
                return res.send({
                    status: 0,
                    message: '注册成功!'
                })
            }
        })
    })
}

exports.login = (req, res) => {
    // 获取登录信息
    const { account, password } = req.body;
    // SQL查询语句，根据账号查询用户信息
    const sql = 'select * from users where account = ?';
    // 执行数据库查询
    db.query(sql, account, (err, result) => {
        // 如果查询出错
        if (err) {
            return res.cc(err);
        }
        // 如果查询结果数量不等于1，说明账号不存在
        if (result.length !== 1) {
            return res.cc('账号不存在!');
        }
        const user = result[0];
        // 比较输入的密码和数据库中的密码是否匹配
        const compareResult = bcrypt.compareSync(password, user.password);
        // 如果密码不匹配
        if (!compareResult) {
            return res.cc('密码错误!');
        }
        // 如果用户状态为1，表示用户已被禁用
        if (user.status === 1) {
            return res.cc('用户已被禁用!');
        }
        // 创建用户对象，去除敏感信息
        const userInfo = { ...user, password: '', image_url: '', create_time: '', update_time: '' };
        // 使用jwt生成token，有效期为12小时
        const tokenStr = jwt.sign(userInfo, jwtConfig.jwtSecretKey, {
            expiresIn: '12h'
        });
        // 返回登录成功信息，包含token和用户信息
        res.send({
            status: 0,
            message: '登陆成功!',
            token: 'Bearer ' + tokenStr,
            results: userInfo
        });
    });
}
